Slip 11


Q.1. Write a python program to implement Polynomial Regression for  
Boston Housing Dataset.     

# Import necessary libraries
import pandas as pd
import numpy as np
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# Step 1: Load the Boston Housing dataset
boston = fetch_openml(name='boston', version=1, as_frame=True)
df = boston.frame

print("Dataset Loaded Successfully!\n")
print("First 5 Rows:\n", df.head(), "\n")
print("Columns:\n", df.columns, "\n")

# Step 2: Define features (X) and target (y)
X = df.drop("MEDV", axis=1)  # MEDV = Median value of owner-occupied homes
y = df["MEDV"]

# Step 3: Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Step 4: Apply Polynomial Features (degree = 2)
poly = PolynomialFeatures(degree=2, include_bias=False)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)

print(f"Polynomial features created: {X_train_poly.shape[1]} total features\n")

# Step 5: Scale the data (important for regression stability)
scaler = StandardScaler()
X_train_poly = scaler.fit_transform(X_train_poly)
X_test_poly = scaler.transform(X_test_poly)

# Step 6: Train the Linear Regression model on polynomial features
model = LinearRegression()
model.fit(X_train_poly, y_train)

# Step 7: Make predictions
y_pred = model.predict(X_test_poly)

# Step 8: Evaluate the model
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("✅ Model Evaluation:")
print("Mean Squared Error:", round(mse, 2))
print("R² Score:", round(r2, 4))

# Step 9: Example comparison (first 5 predictions)
comparison = pd.DataFrame({'Actual': y_test.values[:5], 'Predicted': y_pred[:5]})
print("\nSample Predictions:\n", comparison)


Q.2. Write a python program to Implement Decision Tree classifier model on Data which  
is extracted from images that were taken from genuine and forged banknote-like  
specimens. 
(refer UCI dataset https://archive.ics.uci.edu/dataset/267/banknote+authentication)

# Import necessary libraries
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, accuracy_score

# Load the dataset directly from UCI URL
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00267/data_banknote_authentication.txt"

# Assign column names as given in the dataset description
column_names = ['Variance', 'Skewness', 'Curtosis', 'Entropy', 'Class']
data = pd.read_csv(url, header=None, names=column_names)

# Split features and target
X = data.drop('Class', axis=1)
y = data['Class']

# Split into training and testing data (80% training, 20% testing)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create and train Decision Tree classifier
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# Make predictions
y_pred = model.predict(X_test)

# Evaluate model
print("----- Decision Tree Classifier Results -----")
print("Accuracy:", accuracy_score(y_test, y_pred))
print("\nClassification Report:\n", classification_report(y_test, y_pred))
